package com.mashiro.system.service;

import com.mashiro.system.domain.MoeProject;
import com.mashiro.system.domain.MoeTask;
import com.mashiro.system.domain.data.ProjectData;
import com.mashiro.system.domain.data.ProjectFundData;
import com.mashiro.system.domain.data.ProjectInitAndFinishData;
import com.mashiro.system.domain.data.ProjectTypeData;

import java.util.List;

/**
 * 项目Service接口
 *
 * @author mashiro
 * @date 2023-04-15
 */
public interface IMoeProjectService {
    /**
     * 查询项目
     *
     * @param id 项目主键
     * @return 项目
     */
    public MoeProject selectMoeProjectById(Long id);

    /**
     * 查询项目列表
     *
     * @param moeProject 项目
     * @return 项目集合
     */
    public List<MoeProject> selectMoeProjectList(MoeProject moeProject);

    /**
     * 新增项目
     *
     * @param moeProject 项目
     * @return 结果
     */
    public int insertMoeProject(MoeProject moeProject);

    /**
     * 修改项目
     *
     * @param moeProject 项目
     * @return 结果
     */
    public int updateMoeProject(MoeProject moeProject);

    /**
     * 批量删除项目
     *
     * @param ids 需要删除的项目主键集合
     * @return 结果
     */
    public int deleteMoeProjectByIds(Long[] ids);

    /**
     * 删除项目信息
     *
     * @param id 项目主键
     * @return 结果
     */
    public int deleteMoeProjectById(Long id);

    /**
     * 获取已分配占比
     *
     * @param id 项目主键
     * @return 结果
     */
    public Integer getAllocatedProportion(Long id);

    /**
     * 获取项目当前进度情况
     *
     * @param id 项目主键
     * @return 结果
     */
    public Integer getProjectScheduleDetails(Long id);

    /**
     * 结束项目
     *
     * @param id 项目主键
     * @return 结果
     */
    public int endProject(Long id) throws Exception;

    /**
     * 获取项目的顶级任务列表
     *
     * @param id 项目主键
     * @return 结果
     */
    public List<MoeTask> getTopTaskList(Long id);

    /**
     * 获取处在预警期的项目
     *
     * @return 结果
     */
    public List<MoeProject> getWarnProjectListByManagerId(Long id);
    public Long[] getMoeProjectIdsByManagerId(Long id);

    public List<ProjectTypeData> getMoeProjectTypeData();
    public List<ProjectData> getMoeProjectData();
    public List<ProjectFundData> getProjectFundData();

    List<ProjectInitAndFinishData> getProjectInitAndFinishData();
}
